
var constants = require('../routes/constants');
var url = require('url');
var includes = constants.filter.includes;
var roles = constants.roles;
var rolesValue = constants.rolesValue;

module.exports.Auth = function(req,res,next){

    var currentUser = req.session.currentUser;

    var path = url.parse(req.originalUrl).pathname;

    console.log('url ---->',path);

    for(var i = 0;i < includes.length;i++){
        var kv = includes[i];

        if(kv.path.test(path)){

            var roleValue = rolesValue[kv.rule];//获取需要的权限值

            if(!roleValue){//如果得不到权限代号，说明配置有问题
                var err = new Error('Service error');
                err.status = 500;
                next(err);
                return ;
            } else {//如果权限没问题
                if(!currentUser){//如果没有登陆

                    res.redirect('/toLogin');//跳转到登陆页面
                }else{

                    var currentRoleValue = rolesValue[currentUser.roleInfo.roleName];//获取已登录的用户权限值
                    if(currentRoleValue && currentRoleValue <= rolesValue){
                        //如果已登录的用户权限值小于等于需要的权限值（这意味着用户的权限大于等于需要的权限） 则成功
                        next();
                        return ;
                    }
                    //权限不足
                    var err = new Error('Forbidden');
                    err.status = 403;
                    next(err);
                    return ;
                }
            }
        }
    }
    
    //如果没在需要判定权限的路径中，直接进入下一个组件
    next();

}